package org.tri.gui.worker;

import org.tri.entity.Productor;
import org.tri.gui.worker.exceptions.ProductorDuplicadoException;
import org.tri.persistence.search.BusquedaProductor;

/**
 * La clase {@code ProductorPersistenceWorker} agrega un checkeo de persistencia
 * al worker genérico, para comprobar que el productor que se esta insertando
 * no posea el mismo CUIT que otro productor que ya se encuentra guardado
 * en la base de datos.
 * @author kiira
 * @version 1.0, Mar 10, 2012
 */
public class ProductorPersistenceWorker extends PersistenceWorker {
    /** CUIT a asignar al productor. */
    private long cuit;

    /**
     * Inicializa el worker con el productor a persistir y el cuit a asignar
     * al mismo.
     * @param toSave productor a persistir.
     * @param cuit cuit a asignar al productor.
     */
    public ProductorPersistenceWorker( Productor toSave, long cuit ) {
        super( toSave );
        this.cuit = cuit;
        
    }//end constructor

    @Override
    protected Object doInBackground() throws Exception {
        Productor productor = (Productor)objectToSave;
        
        //previo al guardado, comprobamos que el campo CUIT sea único
        //buscamos por otros productores con el mismo cuit
        BusquedaProductor busqueda = new BusquedaProductor();
        busqueda.porCuitExacto( cuit );
        
        Productor prodEncontrado = busqueda.resultadoUnico();
        
        if ( prodEncontrado != null && prodEncontrado != productor )
            throw new ProductorDuplicadoException(
                    String.format( "Ya existe un productor con CUIT %d", 
                                   cuit ) );
        
        //si paso el checkeo, asignaomos el nuevo cuit
        productor.setCuit( cuit );
        
        //y persistimos el objeto
        return super.doInBackground();
        
    }//end método doInBackground        
    
}//end clase ProductorPersistenceWorker
